import logging
import os


class Logger(object):
    level_relations = {
        'debug': logging.DEBUG,
        'info': logging.INFO,
        'warning': logging.WARNING,
        'error': logging.ERROR,
        'crit': logging.CRITICAL
    }

    def __init__(self, root_path, log_name, level='info', fmt='%(asctime)s - %(levelname)s - %(message)s'):
        # 初始化日志记录器
        self.root_path = root_path  # 设置日志文件的根路径
        self.log_name = log_name  # 设置日志文件的名称
        self.fmt = fmt  # 设置日志的格式
        # 创建一个日志记录器对象
        self.logger = logging.getLogger(self.log_name)
        # 设置日志记录级别
        self.logger.setLevel(self.level_relations.get(level))

    def get_logger(self):
        # 构建日志文件的路径
        path = os.path.join(self.root_path, 'log')

        # 确保日志文件目录存在，如果不存在则创建
        os.makedirs(path, exist_ok=True)

        # 组合日志文件的完整路径和文件名
        file_name = os.path.join(path, self.log_name + '.log')

        # 创建一个文件处理器，用于写入日志信息
        rotate_hander = logging.FileHandler(file_name, mode='a', encoding='utf-8')

        # 创建一个格式器，用于设置日志信息的格式
        formatter = logging.Formatter(self.fmt)

        # 为文件处理器设置格式器
        rotate_hander.setFormatter(formatter)

        # 将文件处理器添加到日志记录器中
        self.logger.addHandler(rotate_hander)

        # 返回配置好的日志记录器
        return self.logger


if __name__ == '__main__':
    # 创建一个日志记录器对象
    logger = Logger(root_path='..', log_name='test').get_logger()

    # 使用日志记录器记录日志信息
    logger.debug('This is a debug message.')
    logger.info('This is an info message.')
    logger.warning('This is a warning message.')
    logger.error('This is an error message.')
    logger.critical('This is a critical message.')

